package Test01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

//Collections工具类的使用
/*
public static <T> boolean addAll(Collection<T> c, T... elements)        批量添加元素
public static void shuffle(List<?> list)                                打乱List集合元素的顺序
public static <T> void sort(List<T> list)                               排序
public static <T> void sort(List<T> list，Comparator<T> c)              根据指定的规则进行排序
public static <T> int binarySearch (List<T> list,T key)                 以二分查找法查找元素
public static <T> void copy( List<T> dest，List<T> src)                 拷贝集合中的元素
public static <T> int fill (List<T> list,T obj)                         使用指定的元素填充集合
public static <T> void max / min(collection<T> coll)                    根据默认的自然排序获取最大/小值
public static <T> void swap(List<?> list， int i, int j)                交换集合中指定位置的元素
 */
public class Test14 {
    public static void main(String[] args) {

        //1、创建集合对象
        ArrayList<String> list = new ArrayList<>();

        //2、批量添加数据
        Collections.addAll(list, "ass", "bda", "ege", "fwe", "weg", "irj", "1234");

        //3、打印集合
        System.out.println(list);

        System.out.println("-----------------------打乱数据-----------------------");
        Collections.shuffle(list);
        System.out.println(list);

        System.out.println("-------------------------sort排序-------------------------");
        Collections.sort(list);//（升序）
        System.out.println(list);

        /*System.out.println("-------------------------sort指定规则排序-------------------------");
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);//（降序）
            }
        });
        System.out.println(list);*/

        System.out.println("-------------------------binarySearch-------------------------");
        //需要元素有序,并且为升序
        System.out.println(Collections.binarySearch(list, "ege"));

        System.out.println("-------------------------copy拷贝数组-------------------------");
        //把list2中的元素拷贝到list3中
        //会覆盖原来的元素
        //注意点：如果list2的长度>list3的长度，方法会报错
        ArrayList<Integer> list2 = new ArrayList<>();
        ArrayList<Integer> list3 = new ArrayList<>();
        Collections.addAll(list2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Collections.addAll(list3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        Collections.copy(list3, list2);
        System.out.println(list2);
        System.out.println(list3);

        System.out.println("-------------------------fill填充集合-------------------------");
        //把集合中现有的所有数据，都修改为指定数据
        ArrayList<Integer> list4 = new ArrayList<>();
        Collections.addAll(list4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Collections.fill(list4, 100);
        System.out.println(list4);

        System.out.println("-------------------------max/min-------------------------");
        //求最大值和最小值
        ArrayList<Integer> list5 = new ArrayList<>();
        Collections.addAll(list5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        System.out.println("最大值：" + Collections.max(list5));
        System.out.println("最小值：" + Collections.min(list5));

        System.out.println("-------------------------max/min指定规则-------------------------");
        //String中默认是按照字母的abcdefg顺序进行排列的
        //现在我要求最长的字符串
        //默认的规则无法满足，可以自己指定规则
        // 求指定规则的最大值或者最小值
        ArrayList<String> list6 = new ArrayList<>();
        Collections.addAll(list6, "a", "aa", "aab", "aaaa");
        System.out.println(Collections.max(list6));
        System.out.println(Collections.max(list6, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        }));

        System.out.println("-------------------------swap-------------------------");
        ArrayList<Integer> list7 = new ArrayList<>();
        Collections.addAll(list7, 1, 2, 3);
        Collections.swap(list7, 0, 2);
        System.out.println(list7);
    }
}
